﻿#pragma once

#include <SFML/Network.hpp>
#include "../../../domain/models/Card.h"
#include "../../../domain/models/CardSet.h"
#include "../../../domain/models/CardsCollection.h"

namespace Views {
	namespace Models {
		namespace Network {
			/**
			* Pomocnicza klasa do serializacji i deserializacji zbiorów kart
			*/
			class CardSetViewModel
			{
			public:
				/**
				* Wszystkie karty które mogą zostać wczytane z pakietu
				* (zazwyczaj wszystkie występujące w grze)
				*/
				Cards::CardsCollection cards;
				Cards::CardSet card_set; /**< Zbiór kart do zapisania lub odczytanych z pakietu */

				/**
				* @param cards Możliwe karty do odczytania
				*/
				CardSetViewModel(Cards::CardsCollection);
				/**
				* @param card_set Zbiór kart do zapisania
				*/
				CardSetViewModel(Cards::CardSet);

				/**
				* Zapisuje karty do pakietu
				* @param Packet Pakiet, do którego zapisywane są karty
				* @param model Obiekt zawierający karty do zapisania w atrybucie card_set
				*/
				friend sf::Packet& operator <<(sf::Packet& Packet, const CardSetViewModel&);
				/**
				* Odczytuje karty z pakietu i zapisuje je w model.card_set
				* @param Packet Pakiet, z którego odczytywane są karty
				* @param model Obiekt zawierający możliwe karty do wczytania w atrybucie cards
				*/
				friend sf::Packet& operator >>(sf::Packet& Packet, CardSetViewModel&);
			};
		}
	}
}

